
const net = require('net');

/**
 * 检查端口是否可用
 * @param {string} port 端口
 * @returns 
 */
function portUsed(port) {
    return new Promise((resolve, reject) => {
        const server = net.createServer().listen(port)
        server.on('listening', function () {
            server.close()
            resolve(port)
        })
        server.on('error', function (err) {
            if (err.code == 'EADDRINUSE') resolve(err)
        })
    })
}

/**
 * 尝试端口是否可用，不可用自动加 1
 * @param {number} port 端口
 * @param {function} callback 得到端口回调，返回端口
 */
async function tryPort(port, callback) {
    const res = await portUsed(port)
    if (res instanceof Error) {
        port++;
        tryPort(port, callback)
    } else {
        callback(port)
    }
}

module.exports = tryPort